package docmanager.operation.novedades;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import docmanager.business.objects.Novedad;
import docmanager.db.ConnectionPool;

import bf.DataAccess;
import bf.operation.Operation;
import bf.operation.OperationException;
import bf.utils.Util;

public class OpConsultarNovedades extends Operation {

	@Override
	public Map execute(HttpServletRequest request) throws OperationException {
        java.util.Date fechaDesde;
        java.util.Date fechaHasta;
		if (request.getParameter("fechaDesde") == null)
		{
			Calendar cal = new java.util.GregorianCalendar();
			cal.add(Calendar.DAY_OF_MONTH, 1);
			java.util.Date hoy = cal.getTime();
			cal = new java.util.GregorianCalendar();
			cal.add(cal.MONTH,-1);			
			java.util.Date mesPasado = cal.getTime();
			fechaDesde = mesPasado;
			fechaHasta = hoy;
		
		}	
		else
		{
			// Ver como cargarlo
			//Calendar cal = new java.util.Gre
			String strFechaDesde = request.getParameter("fechaDesde");
			String strFechaHasta = request.getParameter("fechaHasta");
			fechaDesde = Util.fromStringToDate(strFechaDesde);
			fechaHasta = Util.fromStringToDate(strFechaHasta);
		}
		
		List listaNovedades = new LinkedList();
		//java.sql.Timestamp momentoDesde = new java.sql.Timestamp(fechaDesde.getTime());
		//java.sql.Timestamp momentoHasta = new java.sql.Timestamp(fechaHasta.getTime());
		try {
			Connection conn = ConnectionPool.getConnection();
			//java.sql.PreparedStatement st = conn.prepareStatement("SELECT * FROM novedades WHERE fecha <= ? and fecha >= ?");
			//st.setTimestamp(1, momentoHasta);
			//st.setTimestamp(2, momentoHasta);
			
			//java.sql.PreparedStatement st = conn.prepareStatement("SELECT * FROM novedades");
			//ResultSet rs = st.executeQuery();
			
			
			String strFechaDesde = "'" + Util.getDateYMD(fechaDesde) + "'";
			String strFechaHasta = "'"+Util.getDateYMD(fechaHasta) + "'";
			String query = "SELECT * FROM novedades WHERE fecha >=" + strFechaDesde + " AND fecha <= " + strFechaHasta +
					" ORDER BY fecha desc";  
		System.out.println("La query es " + query);
			ResultSet rs = DataAccess.selectQueryStatic(conn, query);
			
			while (rs.next())
			{
				String texto = rs.getString("texto");
				java.sql.Time timeSQL = rs.getTime("fecha");
				java.sql.Date dateSQL = rs.getDate("fecha");

				java.util.Date fecha = new java.util.Date(dateSQL.getYear(), dateSQL.getMonth(), dateSQL.getDate(),
										timeSQL.getHours(), timeSQL.getMinutes(), timeSQL.getSeconds());
System.out.println("OpCONSNOVEDAD: Fecha cargada" + fecha);
System.out.println("OpCONSNOVEDAD: dia cargado segun SQL" + dateSQL.getDay());

				listaNovedades.add(new Novedad(texto, fecha));
			}
			ConnectionPool.closeConn(conn);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new OperationException();
		}
		
		Map m = new HashMap();
		m.put("fechaDesde", fechaDesde);
		m.put("fechaHasta", fechaHasta);
		m.put("listaNovedades", listaNovedades);
		
		return m;
	}

	@Override
	public String getReturnURL() {
		// TODO Auto-generated method stub
		return "Novedades/ConsultaNovedades.jsp";
	}

}
